import router from '@/router'
import NProgress from '@utils/nprogress'
import { getLocalUser, removeLocalUser } from '@/utils/auth'
import { generateRoutes } from '@utils/routerUtils'
import { storeToRefs } from 'pinia'
import { userStore } from '../store/index.js'

import { ElMessage, ElMessageBox } from 'element-plus'

export function setupPermission() {
  // 白名单路由
  const whiteList = ['/login', '/forgot']

  router.beforeEach(async (to, from, next) => {
    const store = userStore()
    const { projectMenus } = storeToRefs(store)

    NProgress.start()
    console.log('进入路由拦截')
    if (getLocalUser()) {
      // 如果已登录
      if (to.path === '/login') {
        // 跳转到首页
        console.log('已登录，跳转登录页')
        next({ path: '/' })
        NProgress.done()
      } else {
        console.log('已登录，跳转其他页')
        // 跳转其他页面
        // 判定是否有权限
        const hasRoles = projectMenus.value && projectMenus.value.length
        // 有权限
        if (hasRoles) {
          // 如果未匹配到任何路由，跳转到404页面
          console.log('已登录，有权限')
          next()
        } else {
          console.log('已登录，没有权限')
          try {
            const routes = await generateRoutes()
            routes.forEach((route) => {
              router.addRoute('Main', route)
            })
            console.log('获取路由权限')
            next({ ...to, replace: true })
          } catch (error) {
            // 移除 token 并重定向到登录页，携带当前页面路由作为跳转参数
            console.log('获取路由权限报错，返回登录')
            // ElMessage.error('获取路由权限报错，返回登录')
            removeLocalUser()
            store.setProjectMenus([])
            next({ path: '/login' })
            NProgress.done()
          }
        }
      }
    } else {
      console.log('未登录，跳转登录页')
      // 未登录
      if (whiteList.includes(to.path)) {
        // 在白名单，直接进入
        next()
      } else {
        // 不在白名单，重定向到登录页
        next({ path: '/login' })
        NProgress.done()
      }
    }
  })

  router.afterEach(() => {
    NProgress.done()
  })
}

